<?php

namespace SyAliPay\Zhima\Merchant\Closeloop;

/**
 * ALIPAY API: zhima.merchant.closeloop.data.upload request
 *
 * @author auto create
 *
 * @since 1.0, 2019-01-07 20:51:15
 */
class DataUploadRequest
{
    /**
     * 公用回传参数（非必填），该参数会透传给商户，商户可以用于业务逻辑处理，请使用json格式。
     */
    private $bizExtParams;
    /**
     * 单条数据的数据列，多个列以逗号隔开。
     */
    private $columns;
    /**
     * 传入的json格式的文件，其中records属性必填。json中的字段可以通过如下步骤获取：首先调用zhima.merchant.data.upload.initialize接口获取数据模板，该接口会返回一个数据模板文件的url地址，如：http://zmxymerchant-prod.oss-cn-shenzhen.zmxy.com.cn/openApi/openDoc/信用护航-负面记录和信用足迹商户数据模板V1.0.xlsx，该数据模板文件详细列出了需要传入的字段，及各字段的要求，data中的各字段就是该文件中列出的字段编码。
     */
    private $file;
    /**
     * 文件的编码，如果文件格式是UTF-8，则填写UTF-8，如果文件格式是GBK，则填写GBK。
     */
    private $fileCharset;
    /**
     * 芝麻平台服务商模式下的二级商户标识（即二级商户PID），如果是直连商户调用该接口，不需要设置
     */
    private $linkedMerchantId;
    /**
     * 主键列使用传入字段进行组合，也可以使用传入的某个单字段（确保主键稳定，而且可以很好的区分不同的数据）。例如order_no,pay_month或者order_no,bill_month组合，对于一个order_no只会有一条数据的情况，直接使用order_no作为主键列。
     */
    private $primaryKeyColumns;
    /**
     * 文件数据记录条数，如file字段中的record数组有10条数据，那么就填10。
     */
    private $records;
    /**
     * 数据应用的场景编码，场景码和场景名称（数字或字符串为场景码）如下：
     * 8：数据反馈
     * 32：骑行
     * CAR_RENTING：租车行业解决方案
     * 每个场景码对应的数据模板不一样，请使用zhima.merchant.data.upload.initialize接口获取场景码对应的数据模板。
     */
    private $sceneCode;
    private $apiParas = [];
    private $terminalType;
    private $terminalInfo;
    private $prodCode;
    private $apiVersion = '1.0';
    private $notifyUrl;
    private $returnUrl;
    private $needEncrypt = false;

    public function setBizExtParams($bizExtParams)
    {
        $this->bizExtParams = $bizExtParams;
        $this->apiParas['biz_ext_params'] = $bizExtParams;
    }

    public function getBizExtParams()
    {
        return $this->bizExtParams;
    }

    public function setColumns($columns)
    {
        $this->columns = $columns;
        $this->apiParas['columns'] = $columns;
    }

    public function getColumns()
    {
        return $this->columns;
    }

    public function setFile($file)
    {
        $this->file = $file;
        $this->apiParas['file'] = $file;
    }

    public function getFile()
    {
        return $this->file;
    }

    public function setFileCharset($fileCharset)
    {
        $this->fileCharset = $fileCharset;
        $this->apiParas['file_charset'] = $fileCharset;
    }

    public function getFileCharset()
    {
        return $this->fileCharset;
    }

    public function setLinkedMerchantId($linkedMerchantId)
    {
        $this->linkedMerchantId = $linkedMerchantId;
        $this->apiParas['linked_merchant_id'] = $linkedMerchantId;
    }

    public function getLinkedMerchantId()
    {
        return $this->linkedMerchantId;
    }

    public function setPrimaryKeyColumns($primaryKeyColumns)
    {
        $this->primaryKeyColumns = $primaryKeyColumns;
        $this->apiParas['primary_key_columns'] = $primaryKeyColumns;
    }

    public function getPrimaryKeyColumns()
    {
        return $this->primaryKeyColumns;
    }

    public function setRecords($records)
    {
        $this->records = $records;
        $this->apiParas['records'] = $records;
    }

    public function getRecords()
    {
        return $this->records;
    }

    public function setSceneCode($sceneCode)
    {
        $this->sceneCode = $sceneCode;
        $this->apiParas['scene_code'] = $sceneCode;
    }

    public function getSceneCode()
    {
        return $this->sceneCode;
    }

    public function getApiMethodName()
    {
        return 'zhima.merchant.closeloop.data.upload';
    }

    public function setNotifyUrl($notifyUrl)
    {
        $this->notifyUrl = $notifyUrl;
    }

    public function getNotifyUrl()
    {
        return $this->notifyUrl;
    }

    public function setReturnUrl($returnUrl)
    {
        $this->returnUrl = $returnUrl;
    }

    public function getReturnUrl()
    {
        return $this->returnUrl;
    }

    public function getApiParas()
    {
        return $this->apiParas;
    }

    public function getTerminalType()
    {
        return $this->terminalType;
    }

    public function setTerminalType($terminalType)
    {
        $this->terminalType = $terminalType;
    }

    public function getTerminalInfo()
    {
        return $this->terminalInfo;
    }

    public function setTerminalInfo($terminalInfo)
    {
        $this->terminalInfo = $terminalInfo;
    }

    public function getProdCode()
    {
        return $this->prodCode;
    }

    public function setProdCode($prodCode)
    {
        $this->prodCode = $prodCode;
    }

    public function setApiVersion($apiVersion)
    {
        $this->apiVersion = $apiVersion;
    }

    public function getApiVersion()
    {
        return $this->apiVersion;
    }

    public function setNeedEncrypt($needEncrypt)
    {
        $this->needEncrypt = $needEncrypt;
    }

    public function getNeedEncrypt()
    {
        return $this->needEncrypt;
    }
}
